<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div class="box">Map和Set数据结构</div>
</body>
<script>
//  Set和Map是es6新增的数据结构  和他对应的还有WeakSet 和WeakMap
// Set*******
// ES6 提供了新的数据结构 Set。它类似于数组，但是成员的值都是唯一的，没有重复的值。（可以做数组去重）
// let arr =[1,2,2,3,4,4,5]
// console.log(new Set(arr));
// console.log([...new Set(arr)]);
let s = new Set()

s.add(1).add(1).add(2).add('a') //添加方法add
s.delete(1) //删除方法delete
console.log(s.size);//size  长度
console.log(s.has('a'));//has  判断有没有该成员
console.log(s);
s.forEach(item=>{
    console.log(item);//set里面的每一个成员
})

console.log(s.keys()); //set里面的建
console.log(s.values());//set里面的值
console.log(s.entries());//set里面的键值对
// set里面的键和值是一样的


// For in可以遍历对象 ⽽ for of遍历对象会报错
// for in 遍历数组得到的数组的下表 ⽽for of遍历得到的时候数组⾥⾯的每⼀个元素
// for in 和for of 的时候
let list = [{name:'zs',age:18},{name:'lisi',age:19}]
for (var i in list){
       console.log(list[i]);
}
let obj = {
    name:'zs',
    age:18
}
// for(var k of obj){
//     console.log(obj[k]);
// }
// for of  可以循环变量 set 或者 map结构  取决是他是不是Iterator
for(var k of s){
    console.log(k);
}


// WeakSet

// WeakSet 结构与 Set 类似，也是不重复的值的集合。但是，它与 Set 有两个区别。

// 首先，WeakSet 的成员只能是对象，而不能是其他类型的值。

let wk = new WeakSet()

wk.add({name:'123'})
console.log(wk);
// console.log(wk.keys()); WeakSet原型上没有keys values entries forEach size。。。。


</script>
</html>